In [9]:
import pandas as pd
In [10]:
podatki = pd.read_csv(r'C:\Users\samo\Desktop\AnalizaPodatkov\Tabela.csv')
tekmovalci = pd.read_csv(r'C:\Users\samo\Desktop\AnalizaPodatkov\Tekmovalci.csv')
Za projekt analize podatkov pri predmetu programiranje 1 sem si izbral spletno stran Project Euler in analiziral podatke s te strani. Glavno kar me je zanimalo je, za katere naloge so najboljši reševalci potrebovali največ časa in katere naloge so najzahtevnejše in jih je do sedaj rešilo najmanj reševalcev, ter ali je mogoče med njimi najti kakšno povezavo. Za konec pa sem še želel vedeti kdo so najuspešnejši uporabniki na strani Project Euler.
S strani sem pobral podatke in sestavil 2 tabeli. Prva je tabela nalog, ki izgleda takole:
In [3]:
podatki.head(10)
Out[3]:
Pri tem bi želel povedati, da v stolpcu Highscore # piše, koliko tekmovalcev je pri tej nalogi zapisanih v tabeli Fastest Solvers. Ker je stran Project Euler te podatke začela zbirati šele od 277 problema dalje, sem se tudi sam odločil da podatke poberem le za probleme od tega dalje. V stolpcu Povprečni čas pa je izračunan povprečen čas vseh reševalcev v tabeli Fastest Solvers.
Druga tabela, ki sem jo ustvaril pa je tabela vseh uporabnikov, ki so se kdajkoli uvrstili med najboljše reševalce posameznega problema. Za vsakega posebej sem seštel koliko točk je izbral in sicer po ključu: 101 - mesto. Poleg tega pa sem zbral tudi število prvih mest za posameznega tekmovalca. Skupaj imamo kar 2617 različnih imen.
In [19]:
len(tekmovalci)
Out[19]:
In [18]:
tekmovalci.sort_values(['Točke'], ascending = [False]).head(20)
Out[18]:
Tukaj imamo tabelo najuspešnejših uporabnikov strani Project Euler. Izmed 16 tekmovalcev, ki so do sedaj rešili vseh 566 nalog jih večino najdemo tudi v tej tabeli. Naj dodam, da tukaj kot najuspešnejši mislim najhitrejši tekmovalci. Seveda se najdejo tudi reševalci, ki so rešili veliko nalog, a so za te potrebovali več časa. Za zanimivost si poglejmo še tabelo sortirano po Št. prvih mest.
In [13]:
tekmovalci.sort_values(['Št. prvih mest'], ascending = [False]).head(20)
Out[13]:
Daleč najuspešnejši v tem pogledu je tekmovalec 'Anton_Lunyov', ki je kar 45 od 289 problemov rešil najhitreje.
Zanimalo me je, za kateri problem je kateri izmed tekmovalcev potreboval najmanj časa od trenutka objave pa do pravilno oddane rešitve. Najmanj časa je potreboval 'Min_25' pri problemu številka 551 in sicer samo 1 minuto. Problem sicer ni lahek kar lahko vidimo iz sosednjega stolpca, saj so ostali uporabniki potrebovali veliko več časa. Razlog za tako hiter čas je verjetno v tem, da je tekmovalec področje problema že dobro poznal.
In [6]:
podatki.sort_values(['Najhitrejši čas [s]']).head(10)
Out[6]:
Za naslednjo analizo bi nas zanimalni najslabše in najpočasneje reševani problemi, zato se bomo omejili le na naloge, pri katerih je v tabeli Fastest Solvers zapisanih vsaj 95 pa do 100 reševalcev.
In [21]:
maks_vzorec = podatki[podatki['Highscore #'] >= 95]
maks_vzorec.sort_values(['Rešilo #']).head(20)
Out[21]:
Če pogledamo le probleme, ki so v arhivu (torej ne gledamo na zadnjih 10 objavljenih) je najmanj tekmovalcev rešilo problem številka 556. A ta problem bi težko označili kot najtežjega saj je dokaj nov in je zadnji problem, ki je bil trenutno dodan v arhiv. Kandidata za najtežjo nalogo imamo verjetno pri nalogah s številkami 495, 483 in 478, ki so bile objavljene v drugi polovici leta 2014 pa jih je do sedaj rešilo le nekaj več kot 100 uporabnikov. Če bi podobno analizo delali nekaj let pozneje, bo verjetno zadnji izdan problem kandidat za najtežji problem, ki ga je Project Euler kdajkoli objavil. Problem 567 - https://projecteuler.net/problem=566 - je v 13 dnevih rešilo le 19 uporabnikov.
Da bi dobili bolj zanimivo tabelo 'Najtežjih problemov', bi si lahko izmislili funkcijo v odvisnosti od tega, koliko časa je minilo od objave problema in koliko uporabnikov ga je skupno rešilo. Dober kandidat bi bil verjetno kar: Število dni od objave / Število uporabnikov, ki je problem rešilo. Formulo pa bi lahko spreminjali toliko časa, dokler ne bi tudi dejansko dobili smiselne tabele.
Za konec pa si oglejmo še probleme, za katere je bil povprečni čas uporabnikov na tabeli Fastest Solvers najslabši.
In [9]:
podatki.sort_values(['Povprečni čas'], ascending = [False]).head(20)
Out[9]:
In [ ]: